██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
LLVM
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
mwbgLLVM (in precedenza acronimo di mwbwLow Level Virtual Machine, macchina virtuale di basso livello) è un'infrastruttura di compilazione, scritta in mwcaC++, progettata per l'ottimizzazione di programmi in fase di compilazione, di linking, di esecuzione e di non utilizzo. Il progetto LLVM è stato avviato nel mwcq2000 all'Università dell'Illinois.
LLVM attualmente supporta la compilazione di programmi in mwcwlinguaggio C, mwdaC++, mwdqObjective C, mwdgAda, mwdwRust, mweaJulia e mweqFortran, usando dei front-end derivati dalle versioni 4.0.1. e 4.2 del compilatore mwegGNU Compiler Collection (GCC). Un front-end alternativo per mwewlinguaggi di programmazione simili al C è attualmente in sviluppo sotto il nome di mwfaclang.
Usando LLVM, il programmatore può creare una macchina virtuale per linguaggi che la richiedono (ad esempio mwfgJava), un compilatore per una architettura specifica e software di ottimizzazione del codice indipendenti dal tipo di linguaggio utilizzato o dalla piattaforma. La rappresentazione intermedia LLVM (IR) è indipendente sia dal linguaggio che dalla architettura; essa si interpone tra il mwfwcodice sorgente in un dato linguaggio e un generatore di codice per una specifica architettura. LLVM include il supporto all'ottimizzazione del codice inter-procedurale e compilatori sia statici che mwgaJust-in-time.
Ha diversi componenti che si occupano delle diverse fasi di sviluppo; tra essi, si ricordano i frontend per i linguaggi mwggbytecode di mwgwJava, mwhaCIL, mwhqPython, mwhgJulia. Il compilatore just-in-time LLVM è in grado di ottimizzare parti di programma in fase di esecuzione, ed è quindi utile nei casi in cui si voglia valutare l'efficienza di una singola funzione. Grazie a questa sua particolarità, esso viene usato nella pipeline mwhwOpenGL di mwiaMac OS X Leopard per supportare alcune funzionalità non presenti a livello hardware.
Contents
• Licenza
• Note
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Rappresentazione del codice
LLVM utilizza un proprio set di istruzioni indipendente dai linguaggi di programmazione. La maggior parte delle istruzioni hanno una forma simile al mwjwThree address code. Ciascuna istruzione è strutturata in modo tale da assegnare un valore ad una determinata variabile una sola volta: questo aiuta a semplificare l'analisi delle dipendenze tra le variabili.
Ogni forma di cambiamento del tipo di una variabile o di un oggetto è effettuata attraverso l'utilizzo dell'istruzione mwkqcast. LLVM fa uso dei tipi essenziali, come ad esempio gli interi, e di 5 tipi derivati: mwkgpointer, mwkwarray, mwlavettori, strutture e mwlqfunzioni. Questi tipi possono essere usati per rappresentare costrutti più complessi appartenenti a linguaggi di programmazione di alto livello. Per esempio, una classe in C++ può essere rappresentata attraverso una combinazione di strutture, funzioni e array.
Licenza
LLVM e clang sono pubblicamente disponibili sotto la University of Illinois/NCSA Open Source License mwmq, una licenza compatibile con la mwmgGPL.
Note
Voci correlate
Altri progetti
Altri progetti
• Wikimedia Commons
• Wikimedia Commons contiene immagini o altri file su LLVM
Collegamenti esterni
• (EN) Sito ufficiale, su llvm.org.
• (EN) Blog ufficiale, su blog.llvm.org.
• LLVM (canale), su YouTube.
• LLVM, su packages.debian.org.
• citerefgithub(EN) LLVM, su GitHub.
• Repository sorgenti di LLVM, su github.com.
• citereffree-software-directory(EN) LLVM, su Free Software Directory.
• mwqg(EN) The LLVM Compiler Infrastructure Project, su llvm.org.
• mwra(EN) LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation (PDF), su llvm.org. — un documento pubblicato da Chris Lattner e Vikram Adve.
• mwrg(EN) LLVM Language Reference Manual, su llvm.org. — descrive la rappresentazione intermedia LLVM
• mwsa(EN) LLVM 2.0 Presentation, su video.google.com. URL consultato il 23 giugno 2008 (archiviato dall'url originale il 30 dicembre 2007). — Google Tech Talk Presentation in merito a LLVM 2.0